package com.controle;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import com.negocio.entidades.PerfilUsuario;
import com.negocio.entidades.Usuario;
import com.negocio.facade.UsuarioRemote;

@SessionScoped
@ManagedBean(name = "usuarioMB")
public class UsuarioMB extends AbstractMB implements Serializable {
	
	private static final long serialVersionUID = 1L;

	public static final String INJECTION_NAME = "#{usuarioMB}";
	
	@EJB
	private UsuarioRemote usuBean;

	private Usuario usu = new Usuario();
	private List<Usuario> usuarios;
	private List<Usuario> filteredUsuarios;
	private Usuario selectedUsuario;
	private StreamedContent imagem;
	private StreamedContent imagemLogado;
	
	public UsuarioMB(){
		usu = new Usuario();
		selectedUsuario = new Usuario();
	}
	
	public Usuario getUsu() {
		imagem =  new DefaultStreamedContent();
		return usu;
	}

	public void setUsu(Usuario usu) {
		this.usu = usu;
	}
	
	public StreamedContent getImagem() {
		return imagem;
	}

	public void setImagem(StreamedContent imagem) {
		this.imagem = imagem;
	}

	public Usuario getSelectedUsuario() {
		if (selectedUsuario.getFoto() !=null)
			imagem = new DefaultStreamedContent(new ByteArrayInputStream(selectedUsuario.getFoto()));
		else{
			imagem =  new DefaultStreamedContent();
		}
		return selectedUsuario;
	}
	
	public void setSelectedUsuario(Usuario selectedUsuario) {
	        this.selectedUsuario = selectedUsuario;  
	}

	public List<Usuario> getFilteredUsuarios() {  
	        return filteredUsuarios;  
	}  
	  
	public void setFilteredUsuarios(List<Usuario> filteredUsuarios) {  
	        this.filteredUsuarios = filteredUsuarios;  
	}  
	  
	public List<Usuario> getUsuarios() {  
		System.out.println("passei akii");
			usuarios = usuBean.listar();
	        return usuarios;  
	}  
	    
	    
	public PerfilUsuario[] getPerfis() {
	        return PerfilUsuario.values();
	}	
	
	public void doPrepararInserir(ActionEvent actionEvent) {  
		this.usu = new Usuario();
    }
	
	public void doInserir(ActionEvent actionEvent) throws Exception {  
		try {
			usu.setDtCad(new Date());
			usu.setStatus(true);
			usuBean.salvar(usu);
			this.usu = new Usuario();
			RequestContext.getCurrentInstance().execute("dlgNovo.hide()");
		} catch (Exception e) { 
		 	displayErrorMessageToUser("Erro ao inserir usuario.");
		}
    }
	
	public void doAlterar(ActionEvent actionEvent) throws Exception {  
		try {
			usuBean.salvar(selectedUsuario);
			RequestContext.getCurrentInstance().execute("dlgEdit.hide()");
		}catch (Exception e){
			displayErrorMessageToUser("Erro ao alterar usuario.");
		}
    }
	
	
	public void doRemover(Usuario u) {
		try {
			usuBean.excluir(u.getId());
		}catch (Exception e){
				displayErrorMessageToUser("Erro ao excluir usuario.");
		}
	}
	
	public void fileUpload(FileUploadEvent event) throws IOException {
		
			 imagem = new DefaultStreamedContent(event.getFile().getInputstream());
			 byte[] foto = event.getFile().getContents();
			 selectedUsuario.setFoto(foto);
		
		
	}

	public void fileUploadI(FileUploadEvent event) throws IOException {
		
			 imagem = new DefaultStreamedContent(event.getFile().getInputstream());
			 byte[] foto = event.getFile().getContents();
			 usu.setFoto(foto);
		
		
	}

	
	public Usuario getUsuLogado(){
		FacesContext context1 = FacesContext.getCurrentInstance();
		HttpServletRequest request = (HttpServletRequest) context1
				.getExternalContext().getRequest();
		HttpServletRequest req = (HttpServletRequest) request;
		HttpSession session = req.getSession();
  
		@SuppressWarnings("deprecation")
		  Usuario usuLogado = (Usuario) session.getValue("usu");
		if (usuLogado!= null){
			if (usuLogado.getFoto() !=null)
				setImagemLogado(new DefaultStreamedContent(new ByteArrayInputStream(usuLogado.getFoto())));
			else{
				setImagemLogado(new DefaultStreamedContent());
			}
	
		}
		return usuLogado;
	}

	public StreamedContent getImagemLogado() {
		return imagemLogado;
	}

	public void setImagemLogado(StreamedContent imagemLogado) {
		this.imagemLogado = imagemLogado;
	}
	
}